package com.spring.boot.adapter;

/**
 * 新能源汽车的发动机有电能发动机（Electric Motor）和光能发动机（Optical Motor）等，各种发动机的驱动方法不同，
 * 例如，电能发动机的驱动方法 electricDrive() 是用电能驱动，而光能发动机的驱动方法 opticalDrive() 是用光能驱动，
 * 它们是适配器模式中被访问的适配者。
 *
 * 客户端希望用统一的发动机驱动方法 drive() 访问这两种发动机，所以必须定义一个统一的目标接口 Motor，
 * 然后再定义电能适配器（Electric Adapter）和光能适配器（Optical Adapter）去适配这两种发动机。
 */
public class MotorAdapterTest {
    public static void main(String[] args) {
        System.out.println("适配器模式测试：");
        Motor motor=(Motor)ReadXML.getObject();
        motor.drive();
    }
}

//目标：发动机
interface Motor {
    public void drive();
}
//适配者1：电能发动机
class ElectricMotor {
    public void electricDrive()
    {
        System.out.println("电能发动机驱动汽车！");
    }
}
//适配者2：光能发动机
class OpticalMotor {
    public void opticalDrive()
    {
        System.out.println("光能发动机驱动汽车！");
    }
}
//电能适配器
class ElectricAdapter implements Motor{

    private ElectricMotor emotor;

    public ElectricAdapter(){
        emotor = new ElectricMotor();
    }

    public void drive() {
        emotor.electricDrive();
    }
}

class ReadXML
{
    public static Object getObject()
    {
        try {
            String cName="com.spring.boot.adapter.ElectricAdapter";
            Class<?> c=Class.forName(cName);
            Object obj=c.newInstance();
            return obj;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
}
